package com.cuvretool;

import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.util.ArrayList;

import com.cuvretool.model.detail.DrawCallBack;
import com.cuvretool.model.detail.DrawString;
import com.cuvretool.model.detail.ModelGroup;
import com.cuvretool.utils.Vector2;

/**
 * 处理基类
 * @author boy
 *
 */
public class Model implements Base, DrawCallBack{
	// ===========================================================
	// Constants
	// ===========================================================

	// ===========================================================
	// Fields
	// ===========================================================
	/**数据与视图的对接口*/
	private ModelInputHandleListener mInputHandleListener;
	/**曲线的点集*/
	protected ArrayList<Vector2> mResulte;
	/**model区定义的群组*/
	protected final ArrayList<ModelGroup> mGroups;
	// ===========================================================
	// Constructors
	// ===========================================================
	public Model(){
		mGroups = new ArrayList<ModelGroup>();
		init();
	}
	// ===========================================================
	// Getter & Setter
	// ===========================================================
	/**
	 * 数据与视图的对接口
	 * @param inputHandleListener
	 */
	public void setModelInputListener(ModelInputHandleListener inputHandleListener) {
		mInputHandleListener = inputHandleListener;
	}
	/**
	 * 设置操作面板树结构参照骨架
	 */
	private void setOperateTree(){
		mInputHandleListener.setOperateTree(mGroups);
	}
	// ===========================================================
	// Methods for/from SuperClass/Interfaces
	// ===========================================================
	@Override
	public void init() {
		mResulte = new ArrayList<Vector2>();
	}
	/**
	 * 更新曲线
	 */
	@Override
	public void run(){
		setOperateTree();
	}
	
	@Override
	public void over() {
		mResulte.clear();
		mResulte = null;
	}
	
	@Override
	public ArrayList<Vector2> getDrawPoints() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public ArrayList<ArrayList<Vector2>> getDrawLines() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public ArrayList<ArrayList<Vector2>> getDrawPolygons() {
		// TODO Auto-generated method stub
		return null;
	}
	
	@Override
	public ArrayList<DrawString> getDrawStrings() {
		// TODO Auto-generated method stub
		return null;
	}
	// ===========================================================
	// Methods
	// ===========================================================
	/**
	 * for that world
	 * @param g
	 */
	public void DrawTheWorld(Graphics g){
		
	}
	/**
	 * 是否点击中一点
	 * @param pos
	 * @return
	 */
	public boolean isClickPoint(Vector2 pos){
		return false;
	}
	/**
	 * 是否新增点成功
	 * @param pos
	 * @return
	 */
	public boolean isIncreaseOk(Vector2 pos){
		return false;
	}
	/**
	 * 按下鼠标左键或右键
	 * @param button
	 * @param pos 
	 * @return
	 */
	public boolean isPressed(int button,Vector2 pos){
		return false;
	}
	/**
	 * 点是否正在移动
	 * @param pos	移动的位置坐标
	 * @return
	 */
	public boolean isDragPoint(Vector2 pos){
		return false;
	}
	/**
	 * 鼠标up事件，释放对应的状态
	 * @param button
	 */
	public void isReleased(int button){
		
	}
	/**
	 * 鼠标在绘制区移动
	 * @param pos
	 * @return
	 */
	public boolean isMove(Vector2 pos){
		return false;
	}
	/**
	 * 键盘按下事件
	 * @param ｅ
	 * @return	true需要更新，false不需要更新
	 */
	public boolean isKeyPressed(KeyEvent e){
		return false;
	}
	/**
	 * 键盘释放事件
	 * @param ｅ
	 * @return	true需要更新，false不需要更新
	 */
	public boolean isKeyReleased(KeyEvent e){
		return false;
	}
	/**
	 * 更新操作面板树
	 */
	public void updateOperateTree(){
		mInputHandleListener.updateOperateTree();
	}
	// ===========================================================
	// Inner and Anonymous Classes
	// ===========================================================
}
